Доктор ТуамОсес.

Сборник тестовых вопросов и задач на знание C++ и умение

его применять для решения конкретных задач.

 

Москва, 2010 год

©Доктор ТуамОсес inc.

 

 

Сайт автора книги, где мы можете задавать любые вопросы автору – Доктору ТуамОсесу (да и просто пообщаться с автором на любые темы), находится по ссылке: Форум разработчиков радиоэлектронных устройств и программистов

 

 

 

 

1      Предисловие. 2

2      Лексика.. 3

3      Синтаксис.. 5

4      Семантика и прагматика.. 13

4.1        Всё в куче. 13

4.2        Области видимости/действия идентификаторов, тип компоновки, класс памяти…    15

5      Константы (изображения значений) 16

6      Выражения и операции (OPERATORs) 16

7      Операторы (STATEMENTs) 16

8      Указатели, массивы, ссылки. 16

9      Функции. Перегрузка функций. Шаблоны функций. 16

10     Объектно-ориентированное программирование (ООП) 17

10.1       Теория ООП и общие сведения об использовании и реализации ОПП в C++. 17

10.1.1        Теория и основные понятия ООП.. 17

10.1.2        Общие сведения об реализации ООП в C++.. 17

10.2       Описание классов.. 17

10.3       Модификаторы доступа (private, protected и public) 17

10.4       Особенности различных видов классов. 18

10.4.1        Union. 18

10.4.2        Struct 18

10.5       Компоненты класса.. 18

10.5.1        Общие сведения. 18

10.5.2        Поля класса. 18

10.5.3        Методы класса. 18

10.5.4        Статические компоненты класса. 18

10.5.5        Константные компоненты класса. 19

10.5.6. 19

10.6       Конструкторы и деструкторы... 19

10.6.1        Общие сведения о конструкторах и деструкторах и их отличиях от других компонентных функций класса  19

10.6.2        Отличия конструкторов от деструкторов. 19

10.6.3        Виды конструкторов. Их особенности. 19

10.6.4        Использование деструкторов. 20

10.6.5        Перегрузка конструкторов. 20

10.6.6        Виртуальные конструкторы и деструкторы.. 20

10.7       Наследование и иерархия классов.. 20

10.7.1        Виртуальные функции. 20

10.7.2        Абстрактные классы. Их назначение и использование. 20

10.7.3        Множественное наследование. 21

10.8       Вложение классов.. 21

10.9       Друзья класса.. 21

10.9.2        Дружественные функции. 21

10.10     Использование объектов классов.. 22

10.10.1      Создание и инициализация объектов. 22

10.10.2      Специфика глобальных объектов. 22

10.10.3      Прочие вопросы, касающиеся работы с объектами класса. 22

10.10.4      Константные объекты.. 23

10.11     Перегрузка стандартных операций (OPERATORs) 23

10.12     Всё в комплексе. 24

11     Работа с динамической памятью. Использование new и delete. 24

12     Исключения.. 24

12.1       Общие сведения о механизме исключений.. 24

12.2       Синтаксические конструкции в C++ для поддержки механизма исключений.. 25

12.3       Использование механизма исключений в конструкторах и деструкторах.. 25

13     Шаблоны классов и обобщённое программирование. 25

13.1       Общие сведения о шаблонах классов.. 25

13.2       Параметры шаблона класса. Их разновидности и особенности использования.. 25

13.3       Шаблон класса и обычный класс: сходство и различия. 25

13.4       Инстанцирование шаблона.. 26

13.5       Специализация шаблонов. 26

13.5.1        Общие сведения. 26

13.5.2        Частичная специализация шаблона. 26

13.6       Друзья шаблона класса.. 26

13.7       Шаблоны с параметрами, являющимися  шаблонами.. 26

13.8       Шаблоны с переменным числом параметров.. 26

14     Приведение (cast) типов в C++ - стиле. 26

15     Использование RTTI 26

16     Метапрограммирование шаблонов.. 26

17     Паттерны проектирования.. 26

18     Использование средств промышленных библиотек.. 26

18.1       Стандартная библиотека STL. 26

18.2       MFC.. 26

18.3       Loki 26

18.4       Boost.. 26

18.5       Qt.. 26

18.6       GPL. 26

19     Работа с различными средами (IDE) 26

19.1       Microsoft Visual Studio 6.0. 26

20     Парадигмы, идеологии, техники, стили и эволюция языков программирования.. 27

21     Прочее. 27

 

 

 

 

 

1         Предисловие

Сайт автора книги, где мы можете задавать любые вопросы автору – Доктору ТуамОсесу (да и просто пообщаться с автором на любые темы), находится по ссылке: Форум разработчиков радиоэлектронных устройств и программистов

 

Отдельные места (полностью книга будет доступна только издателям, которые захотят её опубликовать) из книги будут опубликовываться и обсуждаться по этой ссылке: FAQ по C++ (фрагменты из моей будущей книги)

 

 

2         Лексика

2.1.1.1  [# Что такое "алфавит" в контексте языка программирования C++? #]

2.1.1.2   [# Могут ли в программе на C++ быть использованы символы не из алфавита языка C++? #]

2.1.1.3  [# Что такое кодировка? Какие кодировки Вы знаете? Чем они отличаются друга от друга?  #]

2.1.1.4   [# Имеет ли значение, с какой кодировкой символов работает текстовый редактор, в котором Вы пишите текст программы на C++? И почему? #]

2.1.1.5  Что такое лексема?

2.1.1.6   [# Дайте определение следующих лексем: "ключевое слово", "служебное слово", "зарезервированное слово", "стандартный идентификатор", "идентификатор (пользователя)".#]

2.1.1.7  Можно ли для записи чисел в выражениях кроме цифр использовать буквы? Если да,  то какие?

2.1.1.8  Что такое "лексический анализ"?

2.1.1.9  Есть ли в C++ такие конструкции (не считая комментарии и строковые константы), в которых компилятор игнорирует регистр написания букв? Если да - приведите примеры. Если нет – объясните почему.

2.1.1.10               Можно ли в программе на C++ использовать русские буквы? Если да, то в каких конструкциях?

2.1.1.11                [# В каких лексемах (частях лексем) языка компилятор работает с последовательностью цифр как с целым числом? #]

2.1.1.12               Какие цепочки символов нужно с осторожностью применять в программе? И в чём их опасность? Приведите примеры?

2.1.1.13                [# Что такое диграфы и триграфы и для чего они нужны? #]

3         Синтаксис

3.1.1.1  [# "Ключевые слова", "зарезервированные слова", "служебные слова". Какие из этих лексем допустимо в некоторых случаях использовать в качестве идентификаторов пользователя? #]

3.1.1.2  [# Сколько операндов имеет операция индексирования []? Какой вид результата должна возвращать эта операция? # ]

3.1.1.3  [# В каких случаях после закрывающей фигурной скобки ('}') нужно обязательно ставить точку с запятой (';')? #]

3.1.1.4  Все ли приведённые ниже определения допустимы в C++? Чем они  отличаются друг от друга?

            typedef struct S1 { char *name; } S ;

            typedef struct { char *name; } S ;

            struct S { char *name; } ;

3.1.1.5  Можно ли в качестве операции индексирования использовать операцию вызова функции ()? В чем ее преимущества перед операцией []?

3.1.1.6  В каких случаях синтаксис языка запрещает записывать числовое значение в десятичной  системе исчисления?

3.1.1.7  Как написать макрос с переменным количеством аргументов?

3.1.1.8  В любой ли конструкции языка C++ вместо идентификатора типа, можно использовать определение этого типа?

3.1.1.9  Где допустимо размещать директивы препроцессора?

3.1.1.10               Какой спецификатор доступа используется по умолчанию для функций?

3.1.1.11               Для чего в C++ ввели функциональную форму приведения типа?

3.1.1.12               Какие директивы из набора "препроцессорных директив" на самом деле ими не являются?

3.1.1.13               Как сделать, чтобы, когда компилятор доходил до заданной точки программы, выдавалось сообщение юзверю в окне сообщений об ошибках и варнингах компилятора?

3.1.1.14               Почему в нижеприведённой программе не подавляется печать варнинга C4700? А как его можно подавить?

 

#include <iostream>

using namespace std  ;

 

int main ()

{

int       int_A , int_B ;

 

#pragma warning ( disable: 4700 )    // warning C4700 должен быть подавлен

 

int_A = int_B ;                           // warning C4700: local variable 'int_B'

// used without having been initialized

cout << "main running " << endl ;

return 0 ;

 

}

3.1.1.15               Можно ли использовать ключевые слова в качестве идентификаторов пользователя? А служебные? А зарезервированные? Если "да", то приведите пример.

3.1.1.16               Приведите пример кода на C++ когда принципиально важно, один пробел будет или несколько подряд идущих пробелов

3.1.1.17               Как написать функцию, принимающую заранее неизвестное число аргументов? Приведите пример.

3.1.1.18               Чем отличаются const char* ptr и char const *ptr?

3.1.1.19               Если результат , возвращаемый функцией , является структурой ( struct ) , то каким образом можно присвоить значения отдельным полям этой структуры в теле функции и как их прочитать в точке вызова функции ?

3.1.1.20               Можно ли в вызове функции не указывать параметры со значениями по умолчанию, если эти значения по умолчанию ещё не определены к моменту вызова функции?

3.1.1.21               Если в вызове функции для параметра, у которого при описании функции было задано default-значение, явно указать присваиваемое значение, то будет ли перед присваиванием параметру этого значения сначала присвоено default-значение?

3.1.1.22               Можно ли в заголовке функции (в прототипе или определении) определять начальные (default) значения только для части аргументов?

3.1.1.23               Можно ли в другом месте программы (или в другом файле) переопределить default-значения аргументов функции?

3.1.1.24               Сколько раз можно в одном и том же файле объявлять одни и те же прототипы функций без default-значений и сколько раз - внешние переменные?

3.1.1.25               Будет ли "ругаться" компилятор если extern-переменная несколько раз объявлена, но ни разу нигде не определена?

3.1.1.26               В каком случае компилятор будет "ругаться" на неиспользуемую переменную?

3.1.1.27               В каком случае компилятор будет "ругаться" на используемую неинициализированную явным образом переменную?

3.1.1.28               Переменная j определена в global scope, в теле main и внутри вложенного в тело main блока. Внутри вложенного блока есть конструкция ::j. К какой из переменных происходит обращение?

3.1.1.29               Переменная j определена в global scope. Выдаст ли ошибку компилятор если внутри  вложенного блока использовать конструкцию ::j в случае если внутри вложенного блока нет локальной переменной j и к глобальной переменной можно обращаться напрямую?

3.1.1.30               Можно ли использовать /* комментарий */ везде где допустимо использовать символ пробела?

3.1.1.31               В каких случаях можно напрямую присвоить указателю одного типа значение указателя другого типа ?

3.1.1.32               Эквивалентны ли нижеследующие выражения X[i], i[X], *(X+i) и *(i+X)? Если да, то в каком случаесли нет, то почему?

3.1.1.33               Сколько всего зарезервированных слов имеется в C++?

3.1.1.34               В теле макроса есть строковая константа. Можно ли передавать параметры макроса внутрь строковой константы?

3.1.1.35               Будет ли выдаваться в MSVC++ варнинг "unreferenced local variable" если переменная нигде не используется, но проинициализирована?

3.1.1.1  В каких случаях использования локальной неинициализированной переменной не выдаётся варнинг: "local variable 'i' used without having been initialized"?

3.1.1.2  Будет ли "ругаться" компилятор если он не найдёт определения продекларированной, но нигде неиспользуемой функции?

3.1.1.3  Допустима ли такая конструкция? {т.е. можно ли повторно открыть доступ к ранее уже открытому namespace}?

using namespace std  ;

using namespace std  ;

using namespace std  ;

3.1.1.4  Зачем в определении  My_Type p = new My_Type  нужно два раза писать "My_Type"?

3.1.1.5  Можно ли в прототипе функции не указывать имена аргументов функции? Если можно - то в каких случаях. Если нельзя - то в каких случаях. Приведите примеры.

3.1.1.6  Можно ли "экранировать" определение внешнего по отношению к данному блоку типа внутри блока?

3.1.1.7  В чём главное отличие между "глобальной переменной", "локальной переменной" и "внешней переменной"

3.1.1.8  Чем в C++ "блок" отличается от "составного оператора"?

3.1.1.9  Можно ли внутри блока создать тип, одноимённый с типом из global scope? И можно ли получить доступ к типу из global scope внутри этого блока?

3.1.1.10               Можно ли переменной перечислимого типа (т.е. типа, описанного через enum) присвоить непосредственное значение или переменную другого типа (как enum, таки не enum типа)?

3.1.1.11               На какие типы можно разделить все операторы (STATEMENTs), имеющиеся в C++?

3.1.1.12               Можно ли выйти из вложенных друг в друга операторов if и/или case не используя оператора goto? Если да – приведите пример, если нет – то объясните почему.

4         Семантика и прагматика

4.1      Всё в куче

4.1.1.1  Чем отличается файл с исходным текстом от единицы трансляции?

4.1.1.2  Какие два вида полиморфизма реализованы в С++?

4.1.1.3  Что такое и для чего используются диграфы и триграфы?

4.1.1.4  Что такое выравнивание и от чего оно зависит? И на что влияет?

4.1.1.5  Чем похож и чем отличается формальный параметр от локальной переменной?

4.1.1.6  В чём различия и похожесть описаний констант через #define, const и enum?

4.1.1.7  В чём разница между инициализацией переменной  и операцией присваивания переменной значения?

4.1.1.8  Чем отличается понятие "инициализирующее значение" от понятия "default-значение"?

4.1.1.9  В чём похожи и чем отличаются ссылки, указатели и массивы?

4.1.1.10               Чем отличаются ссылки от переменных?

4.1.1.11               Что такое L-value и R-Value?

4.1.1.12               В чем различие между модификаторами register, const и volatile?

4.1.1.13               Какие типы выражений Вы знаете?

4.1.1.14               Чем отличаются друг от друга операторы приведения типа: static_cast, reinterpret_cast, dynamic_cast, const_cast?

4.1.1.15               Каким образом можно проинициализировать динамическую переменную?

4.1.1.16               В чем опасность использования макросов? Приведите примеры.

4.1.1.17               В каком порядке вычисляются аргументы функции при ее вызове: слева направо, справа налево или еще как-нибудь?

4.1.1.18               Что такое "анонимное объединение"? И как оно используется?

4.1.1.19               Что такое "анонимное пространство имён"? И для чего оно нужно?

4.1.1.20               Как задать значения аргументов функций по умолчанию? Каковы плюсы и минусы использования этой возможности С++? Каковы ее альтернативы?

4.1.1.21               В чем состоит проблема инициализации глобальных статических переменных?

4.1.1.22               Чем принципиально отличаются операции приведения типа в стиле С и в стиле С++?

4.1.1.23               Что общего и в чём разница использования макросов, inline-функций и template-функций?

4.1.1.24               В чем заключаются сложности использования операции индексирования [] для доступа к элементам двумерного массива?

4.1.1.25               Зависит ли объем выделенной памяти от типа указателя? Влияет ли выравнивание на объем выделяемой динамической памяти?

4.1.1.26               Какие три вида памяти входят в модель памяти С++?

4.2      Области видимости/действия идентификаторов, тип компоновки, класс памяти…

4.2.1.1  Чем отличаются стандартные заголовки <string>, <string.h> и <cstring>?

4.2.1.2  Можно ли использовать слово extern при объявлении функций?

4.2.1.3  Как локализовать объявление функции в файле?

4.2.1.4  Что такое «спецификации компоновки»?

4.2.1.5  Какие объекты обладают внутренним связыванием по умолчанию?

4.2.1.6  Какие области видимости имен вы знаете?

4.2.1.7  Объясните разницу между статической и динамической инициализацией.

4.2.1.8  Каким образом глобальную переменную, определенную в одной единице трансляции, сделать доступной в другой единице трансляции? А константу?

4.2.1.9  Чем отличается «внешнее» связывание от «внутреннего» связывания?

4.2.1.10               Для чего используются пространства имен?

4.2.1.11               Чем отличаются поименованные и неименованные пространства имен?

4.2.1.12               Могут ли пространства имен быть вложенными?

4.2.1.13               Для чего применяются алиасы пространства имен?

4.2.1.14               Как сделать члены пространства имен доступными в нескольких (в пределе — во всех) файлах программного проекта?

4.2.1.15               Может ли переменная, объявленная с как "внешняя" (используется спецификатор класса памяти extern), иметь локальную область видимости?

4.2.1.16               Могут ли в одном и том же файле для разных объектов программы использован один и тот же идентификатор?

4.2.1.17               Дайте определения понятиям "пространство имён" (например "метки", "имена переменных", "имена компонентов классов" и т.п.), "namespace", "сфера действия" и "область видимости"? Чем отличается namespace от "пространства имён"?

4.2.1.18               Можно ли использовать в качестве имени переменной в описании переменной идентификатор, который уже был описан выше как имя типа?

5         Константы (изображения значений)

6         Выражения и операции (OPERATORs)

7         Операторы (STATEMENTs)

8         Указатели, массивы, ссылки.

9         Функции. Перегрузка функций. Шаблоны функций.

9.1.1.1   [# Учитывается ли разница в спецификации исключений (в заголовке функции) при перегрузке функции? #]

9.1.1.2  Разрешается ли специализировать шаблон функции?

9.1.1.3  [# Что из себя представляют параметры шаблона функции и где они используются? #]

9.1.1.4   [# Все ли параметры шаблона функции должны быть обязательно использованы и где? #]

9.1.1.5  В чём общие черты и различия, достоинства и недостатки использования перегрузки функций по отношению к использованию шаблонов функций.

9.1.1.6  Какие параметры функции-шаблона выводятся автоматически?

9.1.1.7  Можно ли перегружать функцию-шаблон?

10   Объектно-ориентированное программирование (ООП)

10.1Теория ООП и общие сведения об использовании и реализации ОПП в C++

10.1.1 Теория и основные понятия ООП

10.1.1.1               [# Что такое полиморфизм? Чем отличаются друг от друга статический и динамический полиморфизм? Приведите примеры кода, в которых используется тот или иной вид полиморфизма. Объясните в чём выгода его использования. #]

10.1.1.2               Что такое "инкапсуляция"?

10.1.1.3               [# Что означает термин "позднее связывание"? #]

10.1.2 Общие сведения об реализации ООП в C++

10.1.2.1               [# В C++ у каждого класса есть некоторые особые функции-члены, вызовы которых могут вставляться компилятором в код без явного на то указания программиста. Перечислите такие функции-члены и те случаи, когда могут возникать неявные вызовы. #]

10.1.2.2               [# Почему в C++ нельзя реализовать автоматическую сборку мусора? #]

10.2Описание классов

10.2.1.1               Для чего применяется предварительное объявление (forward declaration) классов?

10.2.1.2               Для чего используется ключевое слово explicit?

10.2.1.3               Для чего используется ключевое слово "mutable"?

10.2.1.4               В чём разница определения метода внутри и вне класса? И для чего нужны 2 способа описания методов?

10.2.1.5               Можно в методах присваивать параметрам значения по умолчанию как в случае функций, не принадлежащих классам?

10.2.1.6                

10.3Модификаторы доступа (private, protected и public)

10.3.1.1               [# На какие функции, объявленные внутри класса, не распространяется действие модификаторов доступа? #]

10.3.1.2                [# Как определяется тип доступа к компонентам класса если никаких модификаторов доступа в описании класса явно не указано? #]

10.4Особенности различных видов классов.

10.4.1 Union

10.4.1.1               В чем главное отличие объединения от других видов классов С++?. Может ли объединение участвовать в иерархии наследования?

10.4.1.2               Разрешается ли определять для объединения конструкторы и деструктор? А виртуальные функции?

10.4.2 Struct

10.4.2.1               Является ли структура классом? В чём её особенности?

10.4.2.2               Влияет ли наличие методов в структуре на размер объекта? Одинаков ли размер класса и аналогичной структуры?

10.5Компоненты класса

10.5.1 Общие сведения

10.5.1.1               [# Какие сущности могут являться компонентами класса в C++? #]

10.5.1.2               [# Что такое this? И в каких задачах без него невозможно обойтись? #]

10.5.2 Поля класса

10.5.2.1               Может ли поле класса быть объектом  своего же класса? А быть указателем на объект своего класса? А ссылкой на объект своего класса?

10.5.2.2               [# Разрешается ли объявлять массив в качестве поля класса? А константный массив? Если да, то как присвоить элементам массива начальные значения? #]

10.5.3 Методы класса

10.5.3.1               Может ли параметр компонентной функции класса  иметь тип  своего же класса? А указателем на свой класс? А ссылкой на свой же класс?

10.5.4 Статические компоненты класса

10.5.4.1               Для чего нужны статические поля в классе?

10.5.4.2               Сколько места в классе занимают статические поля ?

10.5.4.3               [# Что такое "статический метод"? И чем он отличается от обычного метода? # ]

10.5.4.4               [# Чем отличаются глобальные статические функции от статических функций, являющихся членами классов? #]

10.5.4.5               Какие методы класса не могут быть статическими?

10.5.4.6               Можно ли объявить в классе статическую константу? А константный статический массив?

10.5.4.7               Чем отличается обычная статическая переменная от статической переменной, являющейся членом класса?

10.5.4.8               А какие статические поля можно инициализировать непосредственно в классе?

10.5.4.9               Как инициализировать переменную, являющуюся приватным статическим членом класса?

10.5.4.10           

10.5.5 Константные компоненты класса

10.5.5.1               [# Влияет ли наличие целочисленных констант-полей на размер класса? #]

10.5.5.2               [# Каким образом разрешается инициализировать константные поля в классе? #]

10.5.5.3               [# Что такое "константный метод"? И чем он отличается от обычного метода? И для чего он нужен? #]

10.5.5.4               Может ли константный метод вызываться для объектов-переменных? А обычный метод — для объектов-констант?

10.5.5.5                

10.5.6  

10.6Конструкторы и деструкторы

10.6.1 Общие сведения о конструкторах и деструкторах и их отличиях от других компонентных функций класса

10.6.1.1               [# Что такое конструктор и деструктор? В чём их особенность в сравнении с прочими методами класса? #]

10.6.2 Отличия конструкторов от деструкторов

10.6.2.1               Можно ли  перегружать конструкторы? А деструкторы?

10.6.2.2               Сколько видов конструкторов может быть в классе? А сколько видов деструкторов?

10.6.2.3               Может ли деструктор иметь параметры? А конструктор?

10.6.3 Виды конструкторов. Их особенности.

10.6.3.1               Что такое конструктор копирования? В каких случаях он вызывается?

10.6.3.2               В чем потенциальная опасность конструктора копирования по умолчанию?

10.6.3.3               Может ли конструктор быть приватным? Какие последствия влечет за собой объявление конструктора приватным?

10.6.3.4               Код какого вида конструкторов и в каких случаях может быть сгенерирован компилятором автоматически?

10.6.3.5               Что такое конструктор конверсии (преобразования)? И в каких случаях он вызывается? Какой вид конструктора фактически является конструктором преобразования типов?

10.6.3.6               В каких случаях переменная класса может  быть проинициализирована только в списке инициализации конструктора?

10.6.3.7               Когда класс обязан  иметь явно описанный конструктор по умолчанию?

10.6.3.8               Что общего, и чем обычно отличаются реализации конструкторов копирования, инициализации и перегруженной операции присваивания?

10.6.3.9               В каких случаях происходит неявный вызов конструктора? А как конструктор можно вызвать явно? И когда это нужно?

10.6.4 Использование деструкторов

10.6.4.1               В каких случаях происходит неявный вызов деструктора? А как деструктор можно вызвать явно? И когда это нужно?

10.6.4.2                

10.6.5 Перегрузка конструкторов

10.6.5.1               В чем отличия и что общего в специфике перегрузки конструкторов, деструкторов и обычных методов?

10.6.6 Виртуальные конструкторы и деструкторы

10.6.6.1               В каких случаях деструктор нужно делать виртуальным? И для чего?

10.6.6.2               Чем отличается вызов виртуального деструктора от вызова обычной виртуальной функции?

10.7Наследование и иерархия классов

10.7.1 Виртуальные функции

10.7.1.1               Как виртуальные функции влияют на размер класса?

10.7.1.2               Можно ли сделать виртуальной перегруженную операцию, например, сложение?

10.7.1.3               Каковы особенности вызова виртуальных функций в конструкторах и деструкторах?

10.7.1.4               Наследуются ли виртуальные функции?

10.7.1.5               Может ли виртуальная функция быть дружественной функцией класса?

10.7.1.6               [# Какие функции не могут быть виртуальными? #]

10.7.1.7               [# Что понимается под "виртуальным конструктором"? Для чего он нужен? И как его написать (приведите пример) #]

10.7.2 Абстрактные классы. Их назначение и использование

10.7.2.1               Что такое "абстрактный класс"? И для чего он нужен?

10.7.2.2               Какие компонентные функции базового класса не могут быть унаследованы в классе потомке?

10.7.2.3               Какие две роли выполняет наследование?

10.7.2.4               Какие виды наследования возможны в С++?

10.7.2.5               Можно ли в С++ (если да - то как) написать такой класс, от которого нельзя будет наследовать в дальнейшем никакой другой класс?

10.7.2.6               [# Что такое "виртуальное наследование"? Для чего оно используется? И чем это понятие отличается от понятия "виртуальная функция"? #]

10.7.3 Множественное наследование

10.8Вложение классов

10.8.1.1               Как называется использование объекта одного класса в качестве поля другого класса?

10.8.1.2               Дайте определение вложенного класса. Ограничена ли глубина вложенности классов?

10.8.1.3               Что такое "is-a" и "has-a" отношения между классами?

10.8.1.4               Может ли объемлющий класс иметь неограниченный доступ к элементам вложенного класса? А вложенный класс — к элементам объемлющего? Каким образом вложенный класс может использовать методы объемлющего класса? А объемлющий — методы вложенного?

10.8.1.5               Можно ли определить вложенный класс внешним образом? Зачем это может понадобиться?

10.9Друзья класса

10.9.1.1               Являются ли классы, производные от друзей, друзьями исходного класса?

10.9.1.2               Почему рекомендуется по возможности избегать использования механизма дружественных классов и функций?

10.9.1.3               Могут ли родственные классы быть друзьями друг другу?

10.9.2 Дружественные функции

10.9.2.1               [# Чем дружественные функции отличаются от компонентных функций класса?  #]

10.9.2.2               Наследуются ли дружественные функции?

10.9.2.3               Может ли быть дружественная функция быть виртуальной?

10.9.2.4               Можно ли перегружать дружественную функцию?

10.9.2.5               Может ли дружественная функция описана как константная?

10.9.2.6               Может ли дружественная функция описана как статическая?

10.9.2.7               Может ли приватный метод быть дружественной функцией другого класса?

10.9.2.8               Может ли конструктор быть дружественной функцией для другого класса? А деструктор?

10.9.2.9               Может ли дружественная функция в своём теле вызывать методы того класса, для которого она является другом?

10.9.2.10          А может ли метод класса в своём теле вызывать дружественную функцию?

10.9.2.11          Может ли дружественная функция быть шаблоном функции?

10.9.2.12          Может ли дружественная функция быть членом шаблона класса?

10.9.2.13          Может ли описывать дружественные функции в шаблоне класса?

10.10                       Использование объектов классов

10.10.1                    Создание и инициализация объектов

10.10.1.1          В каком порядке инициализируются поля в классе при использовании списка инициализаторов? Совпадает ли этот порядок с порядком перечисления инициализаторов в списке инициализации конструктора?

10.10.1.2          Чем отличаются друг от друга "инициализация", "копирование", "присваивание" в контексте объектов класса?

10.10.2                    Специфика глобальных объектов

10.10.2.1          От чего зависит порядок создания (последовательность вызова конструкторов) глобальных переменных?

10.10.2.2          Когда и в каком порядке вызываются деструкторы глобальных объектов (т. е. тех, которые объявлены вне функции main)?

10.10.3                    Прочие вопросы, касающиеся работы с объектами класса

10.10.3.1          Расскажите, что и как нужно сделать, что бы объекты написанного Вами класса можно было помещать в cout и читать из cin?

10.10.3.2          Когда можно вернуть из функции ссылку на локальный объект?

10.10.3.3          Как удалить массив объектов?

10.10.3.4          Как запретить удаление объекта класса?

10.10.3.5          Для чего нужен и как используется класс auto_ptr ?

10.10.3.6          Допускается ли при вызове функции передавать объекты в качестве параметров, и какими способами? А возвращать как результат?

10.10.3.7           

10.10.4                    Константные объекты

10.10.4.1          Можно ли изменить значение поля у константного объекта?

10.11                       Перегрузка стандартных операций (OPERATORs)

10.11.1.1          Можно ли при перегрузке изменить приоритет операции и/или её ассоциативность?

10.11.1.2          Можно ли перегружать уже перегруженную функцию - оператор?

10.11.1.3          Все ли стандартные операции можно перегружать? Если нет, то какие и почему?

10.11.1.4          В чем специфика перегрузки операций '||' и '&&' ?

10.11.1.5          Как различаются перегруженная префиксная и постфиксная операции инкремента и декремента?

10.11.1.6          Можно ли в C++ определять новые операции?

10.11.1.7          Что такое "автоматически перегружаемая операция" и перечислите, какие операции в C++ являются "автоматически перегружаемыми"

10.11.1.8          В чем специфика перегрузки операций "sizeof", "typeid", "new" и "delete"? Чем она вызвана?

10.11.1.9          Сравните особенности перегрузки операций "()" и "[]".

10.11.1.10     В чём специфика перегрузки операций как методов класса и как дружественных функций? В каких случаях какой способ оптимальней?

10.11.1.11     Можно ли перегружать операции для встроенных типов данных?

10.11.1.12     Для чего (как правило) используется перегрузка оператора вызова функции?

10.11.1.13     В каких случаях вызывается перегруженный оператор new? А в каких – перегруженный  delete?

10.11.1.14     Какие операции разрешается перегружать только как методы класса? А какие не рекомендуется?

10.11.1.15     Можно ли в одном выражении на одном уровне вложенности применять перегруженные и не перегруженные операторы?

10.11.1.16     Все ли операции можно перегрузить с помощью глобальной дружественной функции?

10.11.1.17     В каких случаях операцию можно перегрузить только глобальной функцией?

10.11.1.18     В каких случаях глобальная операция-функция должна быть дружественной?

10.11.1.19     Обязателен ли в функции operator параметр типа “класс” или “ссылка на класс”?

10.11.1.20      Наследуются ли перегруженные операции?

10.11.1.21      Можно ли повторно перегрузить в производном классе операцию, перегруженную в базовом классе?

10.11.1.22     [# Перегрузка операций приведения типа в стиле С и в стиле С++. В чём специфика? #]

10.11.1.23     [# Есть выражения: ( 66 + 33 ) и ( 66.0 + 33.0 ). Можно ли в этом случае говорить о "перегрузке" операции "+"? Поясните свой ответ на примере #]

10.11.1.24     Какие операции можно перегрузить для доступа к элементам двумерного массива?

10.11.1.25     Зачем при перегрузке new/delete для класса нужно проверять размер запрашиваемой памяти?

10.11.1.26     Как вы думаете, почему функции new/delete, перегружаемые для класса, являются статическими?

10.11.1.27     Отличается ли реализация перегруженной функции new[]() для массивов от реализации «обычной» функции new()?

10.11.1.28     Опишите схему функции, перегружающей глобальную функцию new.

10.11.1.29      

10.12                       Всё в комплексе

10.12.1.1          [# У метода класса параметр описан как ссылка на объект.  Можно ли в методе обращаться к private-полям объекта-параметра? Если да, то в каком случае, если нет – то почему? Приведите примеры. #]

11   Работа с динамической памятью. Использование new и delete.

11.1.1.1               Как запретить создание объектов в куче?

11.1.1.2               В чем специфика применения операции delete к указателям на функции?

11.1.1.3               Как предотвратить утечки памяти, связанные с забывчивостью программистов вызывать delete?

11.1.1.4               Какие типы являются POD-типами? Чем отличается работа механизма new/delete с POD-объектами и nonPOD-объектами?

11.1.1.5               Сколько существует форм new/delete? В чем их отличие?

11.1.1.6               В чем главное отличие объектно-ориентированного механизма new/delete С++ от "сишного"механизма malloc()/free()?

11.1.1.7               Что произойдет, если функции free() передать в качестве аргумента нулевой указатель?

11.1.1.8               Можно ли с помощью функции realloc() уменьшить объем выделенной памяти?

12   Исключения

12.1Общие сведения о механизме исключений

12.1.1.1               Выберете правильный вариант ответа. Исключение — это:

1) событие;

2) ситуация;

3) объект;

4) ошибка в программе;

5) прерывание;

12.1.1.2               В чём общее и принципиальная разница между throw и return?

12.2Синтаксические конструкции в C++ для поддержки механизма исключений

12.2.1.1               Назовите ключевые слова С++, которые используются для обработки исключений.

12.2.1.2               При написании оператора catch мы можем в качестве типа его аргумента написать непосредственно тип исключения, указатель на тип исключения либо ссылку на тип исключения. В чём разница? И в каких случаях нужно применять каждый из способов?

12.2.1.3               Что означает оператор throw без параметра?

12.3Использование механизма исключений в конструкторах и деструкторах

12.3.1.1               А можно ли сгенерировать исключение в деструкторе? А в конструкторе?

12.3.1.2               Что произойдёт если исключение будет сгенерировано в конструкторе или деструкторе?

12.3.1.3               Какие особенности имеет обработка исключения, сгенерированного в конструкторе?

12.3.1.4                

13   Шаблоны классов и обобщённое программирование.

13.1Общие сведения о шаблонах классов

13.1.1.1               Какие виды шаблонов в С++ вы знаете?

13.1.1.2               Для чего предназначены шаблоны?

13.1.1.3               Объясните назначение ключевого слова typename в шаблонах.

13.2Параметры шаблона класса. Их разновидности и особенности использования

13.2.1.1               Какие виды параметров разрешается задавать в шаблоне класса? А в шаблоне функции?

13.2.1.2               Можно ли параметрам шаблона присваивать значения по умолчанию?

13.3Шаблон класса и обычный класс: сходство и различия.

13.3.1.1               Может ли шаблонный (темплэйтный)

13.3.1.2               Можно ли объявить в классе шаблонный метод? А шаблонный конструктор?

13.3.1.3               класс быть абстрактным? Почему?

13.3.1.4               Разрешается ли определять в классе-шаблоне статические поля? А статические методы?

13.3.1.5               Объясните, в чем состоят проблемы, возникающие при разделении шаблонного класса на интерфейс и реализацию?

13.3.1.6               Может ли шаблонный конструктор быть конструктором по умолчанию?

13.3.1.7               Может ли класс-шаблон быть вложенным в другой класс-шаблон? А в обычный класс?

13.3.1.8               Может ли шаблон класса быть наследником обычного класса? А обычный класс от шаблона?

13.3.1.9               Каким образом можно использовать возможность наследования обычного класса от шаблона?

13.3.1.10          В чем разница между определением и объявлением шаблона?

13.4Инстанцирование шаблона

13.4.1.1               Объясните термин «инстанцирование шаблона».

13.4.1.2               Для чего применяются директивы явного инстанцирования?

13.4.1.3               Что такое «модель явного инстанцирования» и как она работает?

13.5Специализация шаблонов.

13.5.1 Общие сведения

13.5.1.1               Что такое специализация шаблона? Объясните разницу между полной и частичной специализацией.

13.5.1.2               Что из себя представляет и для чего применяется специализация шаблонов?

13.5.2 Частичная специализация шаблона

13.5.2.1               Что такое частичная специализация шаблона?

13.6Друзья шаблона класса

13.6.1.1               Какие проблемы возникают при объявлении дружественной функции для класса-шаблона?

13.7Шаблоны с параметрами, являющимися  шаблонами

13.8Шаблоны с переменным числом параметров

14   Приведение (cast) типов в C++ - стиле

15   Использование RTTI

16   Метапрограммирование шаблонов

17   Паттерны проектирования

17.1.1.1               Что такое "паттерны проектирования"?

17.1.1.2               "Паттерны (шаблоны) проектирования", "метапрограммирование шаблонов" и "шаблоны классов": есть ли разница между этими понятиями? Если есть – то в чём?

17.1.1.3               Приведите структуру и принцип действия паттерна Singleton.

17.1.1.4                

18   Использование средств промышленных библиотек

18.1Стандартная библиотека STL

18.2MFC

18.3Loki

18.4Boost

18.5Qt

18.6GPL

19   Работа с различными средами (IDE)

19.1Microsoft Visual Studio 6.0

19.1.1.1               Зачем в дереве проекта нужна категория "Header Files"?

19.1.1.2               Как удалить файл из дерева проекта в MSVC++ 6SP5?

19.1.1.3               Что нужно сделать в MSVC++ чтобы в своей программе можно было использовать объекты определённые в исходниках другого программиста и объявленные (продекларированные) в хидерах?

20   Парадигмы, идеологии, техники, стили и эволюция языков программирования

20.1.1.1               Что такое "Абстракция данных", для чего она нужна и как она проявляется  в программах на C++?

20.1.1.2               Какие аппаратно-ориентированные средства в языке C++ достались ему в наследство от языка C?

20.1.1.3               В чём заключаются недостатки процедурного программирования?

20.1.1.4               Что было "выброшено" из C++ образца 1991 года к 2009 году? Т.е. от каких средств языка C++ было принято отказаться в последних его версиях?

21   Прочее

21.1.1.1               Дайте развернутое сравнение работы со строками в стиле С (char*) и С++ (string).

21.1.1.2               Дайте развернутое сравнение работы с динамической памятью в С и С++.

21.1.1.3               Дайте развернутое сравнение стандартных средств ввода-вывода в С и С++.

21.1.1.4               Расскажите, какие бывают итераторы и чем они отличаются.

21.1.1.5               Как выбрать подходящий для задачи STL-контейнер?

21.1.1.6               Что такое "функтор"? Что такое "алгоритм"?

21.1.1.7               Какие есть способы поиска в контейнерах?

21.1.1.8               В чем разница между stack, queue и другими контейнерами?

21.1.1.9               Что такое распределители (allocators)?

21.1.1.10          Что такое апартамент? В чем разница между однопоточным и многопоточным апартаментом?

21.1.1.11          Что такое суррогатный процесс?

21.1.1.12          Как передать указатель на интерфейс из одного потока в другой в STA?

21.1.1.13          Виды маршалинга , их достоинства и недостатки.

21.1.1.14          Какие есть способы передачи массива структур в COM-сервер?

21.1.1.15          Как можно передавать в COM-сервер блоки данных переменной длины?

21.1.1.16          Кто должен распределять и освобождать память при передаче строк BSTR?

21.1.1.17          Как получить на клиенте данные из буфера, распределенного в COM-сервере?

21.1.1.18          Как в ATL создать многопоточный объект?

21.1.1.19          Какой интерфейс в ATL используется для передачи клиенту информации об ошибках?

21.1.1.20          Как организовать передачу callback-вызовов от COM-сервера к клиенту?

21.1.1.21          Как распределяется доступная процессу память?

21.1.1.22          Чем отличается семафор от мьютекса?

21.1.1.23          Какие средства межпроцессной коммуникации вы знаете? Какие у них достоинства и недостатки?

21.1.1.24          Как создать единственный экземпляр приложения в памяти (singleton)?

21.1.1.25          Как происходит создание отображаемого в память файла?

21.1.1.26          Как передать процессу указатель на память распределенную в другом процессе?

21.1.1.27          Как сигнализировать другому потоку о его завершении и как дождаться его завершения из вызывающего потока?

21.1.1.28          Что такое "паттерны проектирования"?

21.1.1.29          Как сделать так, чтобы при редактировании были видны комментарии для своих методов или переменных?

21.1.1.30          Как сделать так, чтобы показывалось только имя приложения?

21.1.1.31          Как в консольной программе выводить цветные надписи и менять палитру?

21.1.1.32          Как подгрузить Riched32.dll в InitInstance()?

21.1.1.33          Как программно определить тип файловой системы?

21.1.1.34          Как создать окошко на full-screen?

21.1.1.35          Как занести строку из CEdit'a в CListBox?

21.1.1.36          Почему функция CreateProcess не запускает *.lnk-файлы?

21.1.1.37          Как поменять указатель мыши со стрелки на часики и обратно?

21.1.1.38          Как заставить CHttpFile принудительно передавать файлы в бинарном виде?

21.1.1.39          Как сграбить экран?

21.1.1.40          Как сделать надпись перевернутую на 90 градусов?

21.1.1.41          Как, например, сетевую карту "отключить в данной конфигурации" через Win32 API?

21.1.1.42          Как сделать так, чтобы ресурсы dll были видны в пользующей его программе?

21.1.1.43          Как запустить текущего e-mail клиента?

21.1.1.44          Как сделать, чтобы некоторое приложение не показывалось в Task Bar, System Tray и в списке по Ctrl+Alt+Del?

21.1.1.45          Как я могу закрыть приложение, запущенное по ShellExecute?

21.1.1.46          Как программно переключить раскладку клавиатуры?

21.1.1.47          Как программно сделать eject для CD-ROM'a, ZIP'a?

21.1.1.48          Как убрать часы из SystemTray?

21.1.1.49          Как определить, что запущен Screen Saver?

21.1.1.50          С помощью каких функций можно написать программу, которая использует соединения, имеющиеся в удаленном доступе?

21.1.1.51          Как программно сжать/растянуть картинку?

21.1.1.52          Как принудительно завершить MS-DOS задачу, не дожидаясь ее нормального выхода?

21.1.1.53          Как нарисовать рванное окно?

21.1.1.54          Как полностью перекрыть доступ к файлу во время работы с ним?

21.1.1.55          Как сделать так, чтобы во время выполнения длинного метода приложение реагировало на сообщения?

21.1.1.56          Как сделать цикличным проигрывание MIDI-файла?

21.1.1.57          Как перехватывать ВСЕ исключения в процессе?

21.1.1.58          Как узнать, кто в данный момент присоединен через Сеть к машине?

21.1.1.59          Как убрать кнопку с TaskBar'а?

21.1.1.60          Как определить позицию курсора в консоли Win32?

21.1.1.61          Как очистить экран в консоли Win32?

21.1.1.62          Как узнать количество элементов и размер корзины? Как очистить корзину?

21.1.1.63          Как получить список все запущенных процессов и потоков?

21.1.1.64          Какие существуют функции для работы с COM-портом напрямую под Win9x?

21.1.1.65          Как завесить Windows?

21.1.1.66          Как получить hInstance консольного приложения?

21.1.1.67          Чем отличается PID от hInstance?

21.1.1.68          Как установить обои на Рабочий Стол?

21.1.1.69          Как сделать какие-то действия дождавшись завершения процесса?

21.1.1.70          Как отследить нажата ли в текущий момент кнопка мыши с помощью API?

21.1.1.71          С помощью каких механизмов две программы могут обмениваться данными?

21.1.1.72          Как блокировать Alt+Tab во время выполнения программы?

21.1.1.73          Как определить какой service pack установлен на NT ?

21.1.1.74          Как узнать наличие юзера сервере NT ?

21.1.1.75          Как средствами API реализовать в RichEdit разноцветный текст?

21.1.1.76          Как пользоваться элементом управления похожим на открытие файлов, только все это для каталогов?

21.1.1.77          Есть ли функции API, работающие с папками и файлами вместе? Как перемещать, переименовывать и копировать папки вместе с файлами, которые находятся внутри?

21.1.1.78          Как с помощью API организовать запись с CD-ROM'а или микрофона?

21.1.1.79           Каковы способы реализации операций с контейнерами?

21.1.1.80           Какую конструкцию можно назвать «обобщенный алгоритм»?

21.1.1.81           Каким образом объявить указатель на метод?

21.1.1.82           Объясните разницу между указателем на функцию и указателем на метод.

21.1.1.83           Каким образом получить адрес метода?

21.1.1.84           Можно ли указателю на функцию присваивать адрес метода?

21.1.1.85           Какие операции определены в С++ для косвенного вызова метода через указатель?

21.1.1.86           Что такое «функтор»? Приведите пример функционального класса.

21.1.1.87           Какими способами функтор вызывается?

21.1.1.88           Можно ли использовать наследование при разработке функторов?

21.1.1.89           Разрешается ли операцию вызова функции () определять как виртуальный метод? А как статический?

21.1.1.90          В чем преимущества функторов перед указателями на функции?

21.1.1.91           Объясните, зачем нужны адаптеры функторов? Какие виды адаптеров вы знаете?

21.1.1.92           Как используются классы свойств при разработке функторов?

21.1.1.93           Объясните, что такое «композиция» и приведите примеры?

21.1.1.94           Объясните, чем отличается множественное наследование от простого?

21.1.1.95           Приведите структуру и принцип действия паттерна Adapter.

21.1.1.96           Сформулируйте основную проблему множественного наследования.

21.1.1.97           Выполняется ли принцип подстановки при открытом множественном наследовании?

21.1.1.98           Что такое виртуальное наследование? Каковы его преимущества и недостатки по сравнению с обычным наследованием?

21.1.1.99           Может ли виртуальное наследование быть одиночным?

21.1.1.100      Влияет ли виртуальное наследование на размер класса?

21.1.1.101      Объясните, каким образом с помощью виртуального наследования можно вообще запретить наследование.

21.1.1.102      Какие средства С++ составляют RTTI?

21.1.1.103     262. Объясните разницу между повышающим, понижающим и перекрестным приведением.

21.1.1.104      Какими свойствами должен обладать класс, чтобы с ним работал механизм RTTI?

21.1.1.105      В чем приведение указателей отличается от приведения ссылок?

21.1.1.106      Какие исключения связаны с механизмом RTTI?

21.1.1.107      Что такое «поток» — дайте определение.

21.1.1.108     Как классифицируются потоки, реализованые в библиотеках ввода/вывода С++?

21.1.1.109     Что такое буферизация и зачем она нужна?

21.1.1.110     Какие библиотеки ввода/вывода реализованы в С++ и чем они отличаются?

21.1.1.111     Перечислите стандартные потоки и объясните их назначение.

21.1.1.112     Зачем нужен процесс форматирования и когда он выполняется?

21.1.1.113      Что такое «форматная строка», и в каких функциях она используется?

21.1.1.114     Объясните назначение элементов спецификатора формата.

21.1.1.115      Сколько спецификаторов формата может быть в форматной строке?

21.1.1.116     Какой из элементов спецификатора формата не является умалчиваемым?

21.1.1.117     Перечислите несколько известных вам обозначений типов в спецификаторе формата, и укажите их назначение.

21.1.1.118      Сколько модификаторов типа вы знаете, и какую роль модификатор типа играет в спецификаторе формата?

21.1.1.119     С помощью какого флага можно выровнять выводимое значение влево? А каким образом вывести ведущие нули?

21.1.1.120     Какое действие оказывают на выводимую строку ширина, точнойть и флаги в спецификаторе формата?

21.1.1.121     Для чего в спецификаторе формата может использоваться символ звездочка («*»)? Чем отличается действие этого символа при воде и при выводе?

21.1.1.122     Каковы особенности ввода строк?

21.1.1.123      Каким образом ограничить набор вводимых символов при вводе?

21.1.1.124      Что является главной проблемой при использовании форматного ввода/вывода из библиотеки <cstdio>?

21.1.1.125     Объясните, для чего нужны строковые потоки. Почему строковые потоки —всегда форматируемые?

21.1.1.126     С помощью каких функций выполняется работа со строковыми потоками?

21.1.1.127     Можно ли использовать тип string (и каким образом) со строковыми потоками?

21.1.1.128     Объясните, в чем заключается различие между текстовым и двоичным файлом.

21.1.1.129     Объясните, что означает «открыть» файл и «закрыть» файл?

21.1.1.130     Каким образом внешний файл связывается с потоком?

21.1.1.131      Можно ли один и тот же поток связать с разными файлами? А один и тот же файл с разными потоками?

21.1.1.132     Перечислите режимы открытия файла. Чем отличается режим “r” от режима “a”?

21.1.1.133     Какую роль в режиме открытия играет знак плюс («+»)?

21.1.1.134     В каких случаях необходимо следить за ситуацией «конец файла»? Каким способом это делается?

21.1.1.135     Можно ли текстовый файл открыть как двоичный? А двоичный — как текстовый?

21.1.1.136     Какие функции ввода/вывода используются для обмена с текстовыми файлами?

21.1.1.137     Перечислите функции ввода/вывода для работы с двоичными файлами.

21.1.1.138     Какие функции реализованы в библиотеке <cstdio> для обеспечения прямого доступа к записям двоичного файла? Можно ли их использовать для работы с текстовыми файлами?

21.1.1.139     Объясните назначение функции fseek().

21.1.1.140      Чем отличается функция ftell() от функции fgetpos()?

21.1.1.141     Объясните, что означает «перенаправление» потока? Какие потоки можно перенаправлять и куда?

21.1.1.142     Каким образом перенаправление ввода можно использовать для ввода строк с пробелами?

21.1.1.143     В чем преимущества объектно-ориентированной библитеки по сравнению с процедурной?

21.1.1.144     В каких состояних может находиться поток? Каким образом отслживается состояние «конец потока»?

21.1.1.145     Какие объектно-ориентированные потоки связаны со стандартными потоками?

21.1.1.146     Чем отличаются объектно-ориентированные строковые потоки от процедурных строковых потоков?

21.1.1.147     Каким образом строковые потоки можно использовать для ограничения ширины поля ввода? А можно ли с той же целью использовать строковые потоки <cstdio>?

21.1.1.148     Сравните средства форматирования объектно-ориентированной и процедурной библиотеки.

21.1.1.149     Каким образом ввести строку типа string с пробелами?

21.1.1.150     Каково назначение флагов форматированя? Какие средства реализованы в библиотеке для работы с флагами форматирования?

21.1.1.151     Что такое «манипулятор»? В чем преимущества манипуляторов перед флагами форматирования?

21.1.1.152     Как связываются файлы с потоками в объектно-ориентированной библиотеке?

21.1.1.153     Можно ли файлы, записанные функциями библиотеки <cstdio>, прочитать объектно-ориентированными средствами? А наоборот?

21.1.1.154      Перечислите режимы открытия объектно-ориентированных файловых потоков. каким образом комбинируются режимы открытия файлоавых потоков?

21.1.1.155     Обязательно ли закрывать файл, связанный с объектно-ориентированным файловым потоком? А открывать?

21.1.1.156     Каким образом открыть файловый поток для чтения и записи одновременно?

21.1.1.157     Как открыть файловый поток для дозаписи?

21.1.1.158      Можно ли вывести значение переменной в двоичном виде и как это сделать?

21.1.1.159     Разрешается ли наследовать от классов библиотеки ввода/вывода?

21.1.1.160     Каким образом можно еренаправить объектно-ориентированный поток?

21.1.1.161      Как используется буфер потока для копирования потока?

21.1.1.162     Какими операциями выполняется форматированный ввод/вывод в файловые потоки? А неформатированный?

21.1.1.163     Реализованы ли в объектно-ориентированной библиотеке средства прямого доступа к файловым потокам? Сравните их с аналогичными средствами библиотеки <cstdio>.

21.1.1.164     С какими объектно-ориентированными потоками разрешается, и с какими не разрешается использовать средства прямого доступа?

21.1.1.165     Покажите, каким образом можно выполнить перегрузку операций ввода/вывода для нового типа данных.

21.1.1.166     Как выполняется обработка ошибок ввода/вывода в объектно-ориентированной библиотеке?

21.1.1.167     Какое стандартное исключение генерируется при ошибках ввода/вывода? Обязательно ли оно генерируется?

21.1.1.168      Чем стандартные широкие потоки отличаются от узких?

21.1.1.169     Что такое — «локаль», и каково ее назначение?

21.1.1.170     Как установить русский шрифт при выводе в консольное окно?

21.1.1.171     Чем отличается ли ввод/вывод широких файловых потоков от узких?

21.1.1.172     Перечислите все последовательные контейнеры стандартной библиотеки. Чем они отличаются друг от друга?

21.1.1.173     Перечислите адаптеры последовательных контейнеров и дайте их подробную характеристику.

21.1.1.174     Почему для адаптеров-очередей нельзя использовать вектор в качестве базового?

21.1.1.175     Чем простая очередь queue отличается от приоритетной очереди priority_queue?

21.1.1.176     Каким требованиям должны удовлетворять элементы контейнера?

21.1.1.177     Могут ли быть указатели элементами контейнера? А итераторы?

21.1.1.178     Почему нельзя использовать в качестве элементов контейнера стандартный интеллектуальный указатель auto_ptr?

21.1.1.179     Зачем в контейнере list реализованы собственные методы сортировки поиска и слияния? Можно ли пользоваться соответствующими стандартными алгоритмами при обработке списка?

21.1.1.180     Перечислите типовые виды конструкторов, с помощью которых можно создавать последовательный контейнер.

21.1.1.181     Можно ли инициализировать контейнер элементами встроенного массива? А элементами другого контейнера? Какими способами это можно сделать?

21.1.1.182     Почему конструктор инициализации, параметрами которого являются итераторы, сделан шаблонным во всех контейнерах?

21.1.1.183     Какие методы реализованы в контейнере-векторе для доступа к элементам?

21.1.1.184     Отличается ли функция at() доступа по индексу от перегруженной операции индексирования и чем?

21.1.1.185     Перечислите методы контейнера deque, относящиеся к определению размеров контейнера.

21.1.1.186     Чем метод size() отличается от метода capacity()? А в чем отличие этих методов от метода max_size()?

21.1.1.187     Перечислите методы контейнера list, предназначенные для вставки удаления и замены элементов. Отличаются ли эти методы от соответствующих методов вектора и дека?

21.1.1.188     Каким образом выполняются операции сравнения контейнеров?

21.1.1.189     Разрешается ли изменять элемент ассоциативного контейнера, доступный в данный момент по итератору?

21.1.1.190     Какие контейнеры называются ассоциативными и почему?

21.1.1.191     Чем контейнер map отличается от контейнера multimap?

21.1.1.192     Объясните, почему в ассоциативных контейнерах нельзя изменять элемент, доступный в данный момент по итератору.

21.1.1.193     По каким причинам в контейнере-множестве не реализованы типовые операции объединения, пересечения, разности и другие?

21.1.1.194      Как используется структура-пара в ассоциативных контейнерах?

21.1.1.195     Объясните, что такое «критерий сортировки», и каким требованиям он должен удовлетворять? Какой критерий сортировки принят по умолчанию?

21.1.1.196     Какими преимуществами обладает функция make_pair() по сравнению с конструктором pair()?

21.1.1.197     Почему в контейнерах-отображениях операция индексирования перегружена, а в контейнерах-множествах — нет?

21.1.1.198     Какие гарантии безопасности обеспечивают контейнеры стандартной библиотеки?

21.1.1.199     Что такое «транзакционная гарантия безопасности» и чем она отличается от базовой?

21.1.1.200      На какие 4 класса по надежности можно разделить все операции с контейнерами?

21.1.1.201     Что такое «распределитель памяти» и зачем он нужен?

21.1.1.202     Чем отличается битовый вектор bitset от битового вектора vector<bool>?

21.1.1.203      Дайте определение итератора.

21.1.1.204     Что такое «начальный» итератор и «конечный» итератор? Какие методы, связанные с итераторами, обязательно включает каждый контейнер?

21.1.1.205     Чем константный итератор отличается от неконстантного?

21.1.1.206     Объясните, что такое «недействительный» итератор. В каких случаях итераторы становятся недействительными?

21.1.1.207     Какие категории итераторов вы знаете? Какие операции обязательно реализуются для всех категорий итераторов?

21.1.1.208     К какому виду итераторов можно отнести встроенный указатель и почему?

21.1.1.209     Какие вспомогательные функции для итераторов вы знаете? В каких случаях оправдано их применение?

21.1.1.210     Какие адаптеры итераторов реализованы в библиотеке?

21.1.1.211      Объясните, почему итераторы реализованы как вложенные классы в контейнерах.

21.1.1.212     Чем отличаются итераторы вставки от обычных итераторов?

21.1.1.213     Каким образом используются потоковые итераторы?

21.1.1.214     Какие стандартные функторы реализованы в библиотеке STL? Каково их основное назначение?

21.1.1.215     Для чего нужны адаптеры функторов bind1st() и bind2nd()?

21.1.1.216     Как применяются адаптеры-отрицатели?

21.1.1.217     Почему алгоритмы remove() не удаляют элементы из контейнеров? Как реально удалить элементы из контейнера?

21.1.1.218     Чем отличается стабильная сортировка от обычной?

21.1.1.219     Какую функцию выполняет алгоритмы unique()?

21.1.1.220     Могут ли стандартные алгоритмы работать со строками?

21.1.1.221     Нужно ли сортировать ассоциативные контейнеры?

21.1.1.222     Можно ли алгоритмы для работы с множествами применять для последовательных контейнеров? При каких условиях?

21.1.1.223      Дайте определение контейнера.

21.1.1.224     Какие виды встроенных контейнеров в С++ вы знаете?

21.1.1.225     Какие виды доступа к элементам контейнера вам известны?

21.1.1.226     Чем отличается прямой доступ от ассоциативного?

21.1.1.227      Перечислите операции, которые обычно реализуются для последовательного доступа к элементам контейнера.

21.1.1.228      Дайте определение итератора.

21.1.1.229      Можно ли реализовать последовательный доступ без итератора? В чем преимущества реализации последовательного доступа с помощью итератора?

21.1.1.230      Что играет роль итератора для массивов С++?

21.1.1.231     Почему для классов-контейнеров деструктор надо писать явным образом?

21.1.1.232     Что такое «глубокое копирование» и когда в нем возникает необходимость?

21.1.1.233     Почему необходимо писать два определения операции индексирования? Чем они отличаются?

21.1.1.234     Можно ли класс-итератор реализовать как внешний класс? А как вложенный? В чем отличия этих методов реализации?

21.1.1.235     Что такое «запредельный» элемент, какую роль он играет в контейнерах?

21.1.1.236     Объясните, по каким причинам трудно написать универсальный контейнер, элементы которого могут иметь произвольный тип.

21.1.1.237     Каким образом исключение генерируется?

21.1.1.238      Каковы функции контролируемого блока?

21.1.1.239      Что обозначается ключевым словом catch?

1) контролируемый блок;

2) блок обработки исключения;

3) секция-ловушка;

4) генератор исключения;

5) обработчик прерывания;

21.1.1.240     Какого типа может быть исключение?

21.1.1.241     Сколько параметров разрешается писать в заголовке секции-ловушки?

21.1.1.242     Какими способами разрешается передавать исключение в блок обработки?

21.1.1.243     Объясните, каким образом преодолеть ограничение на передачу единственного параметра в блок обработки.

21.1.1.244     Почему нельзя выполнять преобразования типов исключений при передаче в секцию-ловушку?

21.1.1.245     Напишите конструкцию, которая позволяет перехватить любое исключение.

21.1.1.246     Могут ли контролируемые блоки быть вложенными?

21.1.1.247     Зачем нужен «контролируемый блок-функция» и чем он отличается от обычного контролируемого блока?

21.1.1.248     Перечислите возможные способы выхода из блока обработки.

21.1.1.249     Каким образом исключение «передать дальше»?

21.1.1.250     Сколько секций-ловушек должно быть задано в контролируемом блоке?

21.1.1.251     Что такое «спецификация исключений»?

21.1.1.252     Что происходит, если функция нарушает спецификацию исключений?

21.1.1.253     Что такое «иерархия исключений»?

21.1.1.254     Существуют ли стандартные исключения? Назовите два-три типа стандартных исключений.

21.1.1.255     Поясните «взаимоотношение» исключений и деструкторов.

21.1.1.256     Объясните, зачем может понадобиться подмена стандартных функций завершения.

21.1.1.257     Какие виды нестандартных исключений вы знаете?

21.1.1.258     В чем отличие механизма структурной обработки исключений Windows от стандартного механизма?

21.1.1.259     Чем отличается модификатор доступа protected от модификаторов private и public?

21.1.1.260     Сформулируйте правила написания конструкторов в производном классе.

21.1.1.261     Каков порядок вызова конструкторов? А деструкторов?

21.1.1.262      Можно ли в производном классе объявлять новые поля? А методы?

21.1.1.263     Если имя нового поля совпадает с именем унаследованного, то каким образом разрешить конфликт имен?

21.1.1.264      Что происходит, если имя метода-наследника совпадает с именем базового метода?

21.1.1.265      Сформулируйте принцип подстановки.

21.1.1.266     Когда выполняется понижающее приведение типов?

21.1.1.267     Объясните, что такое «срезка» или «расщепление».

21.1.1.268      Объясните, зачем нужны виртуальные функции.

21.1.1.269      Дайте определение полиморфного класса.

21.1.1.270      Может ли конструктор быть виртуальным? А деструктор?

21.1.1.271     Как объявляется «чистая» виртуальная функция?

21.1.1.272      Дайте определение абстрактного класса.

21.1.1.273      Наследуются ли чистые виртуальные функции?

21.1.1.274      Можно ли объявить деструктор чисто виртуальным?

21.1.1.275      Чем отличается чистый виртуальный деструктор от чистой виртуальной функции?

21.1.1.276      Зачем требуется определение чистого виртуального деструктора?

21.1.1.277      Наследуется ли определение чистой виртуальной функции?

21.1.1.278      Приведите классификацию целей наследования.

21.1.1.279      Объясните разницу наследования интерфейса от наследования реализации.

21.1.1.280      Назовите причины, требующие разделения программ на части.

21.1.1.281      Существуют ли в С++ конструкции, позволяющие идентифицировать отдельный модуль?

21.1.1.282     Какие способы сборки программы вы можете назвать?

21.1.1.283     Что такое «объектный модуль»? Программа, которая «собирает» объектные модули в программу, называется _____________ ?

21.1.1.284     В чем заключается отличие аргумента «файл» от <файл> в директиве #include?

21.1.1.285      Что такое ODR?

21.1.1.286      Объясните, что такое «страж» включения и зачем он нужен.

21.1.1.287     Является ли интерфейс класса его определением?

21.1.1.288      Сколько определений класса может быть в единице трансляции?

21.1.1.289     Сколько определений класса может быть в многофайловой программе?

21.1.1.290     Объясните суть идиомы Pimpl.

21.1.1.291      Что такое делегирование и как его можно использовать для повышения степени инкапсуляции?

21.1.1.292     Объясните, что такое класс свойств (класс трактовок).

21.1.1.293     Что такое «инициализация нулем»?

21.1.1.294     Что является единицей памяти в С++? Какие требования к размеру единицы памяти прописаны в стандарте С++?

21.1.1.295     В каких единицах выдает результат операция sizeof? Какие типы данных имеют размер 1?

21.1.1.296     Сколько видов динамической памяти обеспечивает С++?

21.1.1.297     Какие функции для работы с динамической памятью достались С++ по наследству от С? В какую библиотеку они включены?

21.1.1.298     Какие функции выделяют память, и с помощью каких функций память освобождается?

21.1.1.299     Какое важное отличие имеет функция calloc() от функции malloc()?

21.1.1.300     Какие действия выполняют функции выделения памяти, если память не может быть выделена?

21.1.1.301     Какие функции выполняет обработчик new?

21.1.1.302     Можно ли реализовать собственный обработчик new и «прицепить» его к механизму new/delete?

21.1.1.303     В чем похожи и чем отличаются объединение и размещающий new?

21.1.1.304     Объясните, почему при использовании размещающего new нужно явным образом вызывать деструктор?

21.1.1.305     Зачем нужны интеллектуальные указатели?

21.1.1.306     Что такое «стратегия владения»? Сколько стратегий владения вы знаете?

21.1.1.307     Какой интеллектуальный указатель реализован в стандартной библиотеке STL, и какую стратегию владения он реализует?

21.1.1.308     Объясните, в чем преимущества и недостатки интеллектуальных указателей со счетчиком ссылок.

21.1.1.309     Объясните, чем определяется «динамичность» контейнеров?

21.1.1.310     Что такое «стратегия распределения памяти», и какие стратегии выделения памяти вы знаете?

21.1.1.311     Рассмотрите следующую стратегию распределения памяти: память выделяется для нескольких элементов блоками фиксированной длины, но блоки связываются в список. Для какого вида контейнера можно использовать такую стратегию?